package ganga.sport;

import ganga.custodian.LoggingService;
import ganga.sportsman.Application;
import ganga.ui.Builder;
import ganga.dsp.HelloNDK;
import ganga.events.NotificationID;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Chronometer;
import android.widget.Toast;
import android.graphics.Color;

/**
 * Sportsman monitoring panel This activity aimed to be a main Sportsman screen
 * Главное окно спортсмена представляет из себя панель монитора. Общая идея
 * главного окна - реализовать метафору панели прибора, отражающего оперативную
 * информацию.
 * 
 * @author Apocrypha
 * @version 1.0
 * @updated 29-фев-2012 22:46:37
 */

public class SportsmanMainActivity extends Activity {
	private Application application;
	private Builder     builder;
	private Chronometer mChronometer;
	private boolean chronoStart;

	/**
	 * Called when the activity is first created.
	 * 
	 * @param savedInstanceState
	 */
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sportsmanmainactivity);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        
        // Application
        application = Application.getInstance();
        ++application.activityNum;
        // Builder
        builder = new Builder(this);
        
     // TODO: Вызов метода приложения
        startService(new Intent(this, LoggingService.class));
        
        
     // Chronometer
        mChronometer=(Chronometer)findViewById(R.id.chronometer);
        mChronometer.setOnClickListener(new View.OnClickListener() {
        	/**
        	 * Вызывается когда осуществляется клик непосредственно по элементу UI - Хронометр.
        	 * @param View.OnClickListener()
        	 */
        	@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if(chronoStart) {
					Toast toast = Toast.makeText(getApplicationContext(), "Секундомер остановлен", Toast.LENGTH_SHORT);
					toast.show();
					application.displayNotify(getApplicationContext(), "Cекундомер остановлен", "Cекундомер остановлен", "Cекундомер остановлен", NotificationID.CHRONOMETER_OFF);
					chronoStart = false;
					mChronometer.stop();
					mChronometer.setTextColor(Color.WHITE);
					
				} else {
					Toast toast = Toast.makeText(getApplicationContext(), "Секундомер запущен", Toast.LENGTH_SHORT);
					toast.show();
					application.displayNotify(getApplicationContext(), "Запуск секундомера", "Запуск секундомера", "Запуск секундомера", NotificationID.CHRONOMETER_ON);
					mChronometer.setBase(SystemClock.elapsedRealtime());
					chronoStart = true;
					mChronometer.setTextColor(Color.argb(255, 0, 255, 0));
					mChronometer.start();
				}
			}
		});
        
	}
	
	/**
	 * Инициализация содержимого меню активности/окна/формы.
	 * Метод вызывается один раз, когда меню отображается в первый раз. 
	 * @param menu
	 * @return
	 */
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
		return true;
	}
	
	/**
	 * Метод вызывается, когда выбран пункт меню.
	 * Обработка выбора пункта меню. Метод вызывается, когда пользователь выбирает(клик) пункт меню. 
	 * @param item
	 * @return
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		ActivityManager activityManager = (ActivityManager)getBaseContext().getSystemService (Context.ACTIVITY_SERVICE);
		String packageName = activityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
		String className=activityManager.getRunningTasks(1).get(0).topActivity.getClassName();
		
		switch(item.getItemId()) {
		case R.id.menu_monitor:
			if(!className.equalsIgnoreCase(packageName+".SportsmanMainActivity")) {
				Intent intent_monitor = new Intent();
				intent_monitor.setClass(this, SportsmanMainActivity.class);
				setIntent(intent_monitor);
				startActivity(intent_monitor);
			}
			break;
		case R.id.menu_training:
			if(!className.equalsIgnoreCase(packageName+".SportsmanTrainingActivity")) {
				Intent intent_training = new Intent();
				intent_training.setClass(this, SportsmanTrainingActivity.class);
				setIntent(intent_training);
				startActivity(intent_training);
			}
			break;
		case R.id.menu_preference:
			if(!className.equalsIgnoreCase(packageName+".CustodianPreferencesActivity")) {
				Intent intent_preferences = new Intent();
				//intent.setClass(this, PreferencesFromXml.class);
				intent_preferences.setClass(this, CustodianPreferenceActivity.class);
				setIntent(intent_preferences);
				startActivity(intent_preferences);
			}
			break;
		case R.id.menu_exit:
			closeActivity();
			break;
		}

		String msg = "Test message for NDK";
		HelloNDK.outlog(msg);
		
		return super.onOptionsItemSelected(item);
	}
	/**
	 * Закрытие окна.
	 * Вызывается по клику пункта меню Выход (@+id/menu_exit/R.id.menu_exit).
	 */
	private void closeActivity() {
		application.onExit=true;
		application.onTerminate();
		//System.runFinalizersOnExit(true);
		System.exit(0);
	}
	
	/**
	 * Разрушение окна.
	 * Выполняет любые окончательные очистки данных перед уничтожением окна.
	 * 
	 * * @see android.app.Activity#onDestroy()
	 */
	@Override
	public void onDestroy() {
		super.onDestroy();
	}
}